// ======================================================================
// Author : $Author$
// Version: $Revision$
// Date   : $Date$
// Url    : $URL$
// ======================================================================

// ======================================================================
//    _/|            __
//   // o\         /    )           ,        /    /
//   || ._)    ----\---------__----------__-/----/__-
//   //__\          \      /   '  /    /   /    /   )
//   )___(     _(____/____(___ __/____(___/____(___/_
// ======================================================================

// ======================================================================
// This file is adopted from chessx/src/database/rand64.h
// Copyright: (C) 2005 Marius Roets <roets.marius@gmail.com>
// ======================================================================

// ======================================================================
// Copyright: (C) 2009-2012 Gregor Cramer
// ======================================================================

// ======================================================================
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
// ======================================================================

#ifndef _db_rand64_included
#define _db_rand64_included

#include "db_common.h"

namespace db {
namespace rand64 {

enum
{
	Max_Pieces					= db::piece::Last + 1,
	Max_Squares					= db::sq::h8 + 1,
	Max_En_Passant_Squares	= 16,
};

uint64_t const Squares[Max_Pieces][Max_Squares] =
{
#if 1
	// Empty
	{
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
	},
	// WhiteKing
	{
		UINT64_C(0x1ec62f17201666a9),
		UINT64_C(0xbbfacfa8b9cedc99),
		UINT64_C(0xd52582ca4006e48d),
		UINT64_C(0xbe5cc29389b0a011),
		UINT64_C(0x70b7b299fa084b79),
		UINT64_C(0x31fc91d4b888aac6),
		UINT64_C(0x953d8d65f16a27f5),
		UINT64_C(0xa9e1894a083988a6),

		UINT64_C(0x21454de44a9c3b61),
		UINT64_C(0x5f8b1149ed761b1d),
		UINT64_C(0x175d8e3320bc756e),
		UINT64_C(0xdf290612a1c03992),
		UINT64_C(0xe8eb7e4dd25319a8),
		UINT64_C(0x0af4b12ca66fd9c4),
		UINT64_C(0xbc7a46849f1ecb92),
		UINT64_C(0x3176f59e6d590325),

		UINT64_C(0xba1dd7cef5e19864),
		UINT64_C(0x66354050f7debe97),
		UINT64_C(0xa9bf0a169bacd362),
		UINT64_C(0x6fbcab3c9569da6c),
		UINT64_C(0xf776879f9737354a),
		UINT64_C(0x1bb627864a4de101),
		UINT64_C(0x7e0e89ff7ed651a4),
		UINT64_C(0xd60fbbffa2bc218e),

		UINT64_C(0x9fae83ea899cdc65),
		UINT64_C(0xe968a74b29e28a00),
		UINT64_C(0x7441d6653deb9005),
		UINT64_C(0x0114e67f4d201286),
		UINT64_C(0xb570a88f1bb4a04f),
		UINT64_C(0x979a9ed22e05d8f5),
		UINT64_C(0x5c07b95482adfa30),
		UINT64_C(0x895a9ebc0f0425f9),

		UINT64_C(0xeb9c39059e157744),
		UINT64_C(0x56eaba15345d2d3f),
		UINT64_C(0xe16e06e1d7ecc810),
		UINT64_C(0x36e6163492b22bd2),
		UINT64_C(0xb16091b81a2e4d3f),
		UINT64_C(0x457ccde451eb1bc7),
		UINT64_C(0x84d57d447975de25),
		UINT64_C(0x9f9e74faa2ad3bd3),

		UINT64_C(0x24c7ae8acd3ad30d),
		UINT64_C(0xa3cbda8eb6cd6d17),
		UINT64_C(0x92d9ee42cbfa4f52),
		UINT64_C(0x438f893e666ffa6b),
		UINT64_C(0x3ccc5d24464f62b1),
		UINT64_C(0xcfa9275812d9e5db),
		UINT64_C(0xbbf17284897c0f48),
		UINT64_C(0xa077f2f8f190127b),

		UINT64_C(0x5fdeec8850464c2b),
		UINT64_C(0x9429d7f4c15885f4),
		UINT64_C(0x4dcac2831e23e842),
		UINT64_C(0x4e109f15c27a18bf),
		UINT64_C(0x8999f31dcc6fe7a9),
		UINT64_C(0x38d5a8a6044dd9ee),
		UINT64_C(0xa744dd883d5c7225),
		UINT64_C(0xeeb12aaf9f92ef25),

		UINT64_C(0xb1b218b1bb67cf61),
		UINT64_C(0xe83e436e7362d9de),
		UINT64_C(0x537512d7cdb2153b),
		UINT64_C(0xd6483b5692e687aa),
		UINT64_C(0x6b0a45a3318c51d5),
		UINT64_C(0x226771aa9189c198),
		UINT64_C(0x53235ce529bfd016),
		UINT64_C(0x5ca80b4f2d5e1eb6),
	},
	// WhiteQueen
	{
		UINT64_C(0x53245edcd60cf397),
		UINT64_C(0x7f6a708b5e8c84a4),
		UINT64_C(0x0325e8b4fb9a1aa4),
		UINT64_C(0x14887c78f2a09203),
		UINT64_C(0xc2bb16d21c0bc8cc),
		UINT64_C(0xe055caaa118766fc),
		UINT64_C(0x359748cb791ec67d),
		UINT64_C(0x3b61d875ea2b7561),

		UINT64_C(0x2a1b6c8960df15e0),
		UINT64_C(0x9bf0d7a44740e32f),
		UINT64_C(0xc22bf6c21eee246f),
		UINT64_C(0xc020519cb401d072),
		UINT64_C(0x0f0968c3468e10e2),
		UINT64_C(0xac96e408328061cb),
		UINT64_C(0x7f7777aa95130c9b),
		UINT64_C(0x6ce2af6150e0495a),

		UINT64_C(0xabf54956d8e7b2ae),
		UINT64_C(0x5d61b62788db096f),
		UINT64_C(0x1dd0995e3a3833f6),
		UINT64_C(0x4830b9ec0a52efea),
		UINT64_C(0x4b6deac9ba54aed7),
		UINT64_C(0xd8a5b2d82eb070ef),
		UINT64_C(0x0c78f51efd50a99d),
		UINT64_C(0xb2d750e4cc381595),

		UINT64_C(0xcc5a3d6cc8412cf9),
		UINT64_C(0x716449e782e7c15e),
		UINT64_C(0x60971d4c2dd8a2de),
		UINT64_C(0xd181dae3d9e17d00),
		UINT64_C(0x0a51553f160a644a),
		UINT64_C(0x33c2e7d569cfe4ff),
		UINT64_C(0xf5463eadaa35d7b1),
		UINT64_C(0x8597d849d5df0697),

		UINT64_C(0x54673596ef45e29f),
		UINT64_C(0x2753a9185702bdec),
		UINT64_C(0x68edde16eb851e87),
		UINT64_C(0xe63abaa5324431d8),
		UINT64_C(0x238e3822a5480bbf),
		UINT64_C(0x569dfbff9e7a3228),
		UINT64_C(0x583d319124ecc023),
		UINT64_C(0x174c93c203e706ca),

		UINT64_C(0x75515b06b221631f),
		UINT64_C(0xa3c0046d21d3937a),
		UINT64_C(0x786176c17d7255e2),
		UINT64_C(0x7fe7b6e3fee8447b),
		UINT64_C(0x36b33d94116aa3d6),
		UINT64_C(0xa540f2adc881ad04),
		UINT64_C(0xc8e77cabc847bb78),
		UINT64_C(0x3bb391ff43276713),

		UINT64_C(0x9195bbff45b7f7e2),
		UINT64_C(0x79019d67f09cbcc8),
		UINT64_C(0xa8f17ad8e5ff080e),
		UINT64_C(0x345b6fbbb3a98cd3),
		UINT64_C(0x280ec7eb3f29a129),
		UINT64_C(0x8cf0d5580efabe5e),
		UINT64_C(0xd74514789ff96be4),
		UINT64_C(0xaf51af61e09dcf72),

		UINT64_C(0x2d886dba5494feb9),
		UINT64_C(0x47847fb8831e9742),
		UINT64_C(0x9c4645caf979f848),
		UINT64_C(0xbdcb1b461cbac0bb),
		UINT64_C(0xe0f76bfdabb9f044),
		UINT64_C(0x452df2be09d5455a),
		UINT64_C(0x6360e134cb41175a),
		UINT64_C(0xedf28a4ba7818d3b),
	},
	// WhiteRook
	{
		UINT64_C(0xcadac8d042c2659d),
		UINT64_C(0x454389d89b0bf801),
		UINT64_C(0xec352b4584ab0ba2),
		UINT64_C(0x7d109cb245e59d87),
		UINT64_C(0x68a74d8f67ac0998),
		UINT64_C(0x2da1d772e2672337),
		UINT64_C(0x95c65d9f325a81a9),
		UINT64_C(0x035c69e246ea2a2a),

		UINT64_C(0x7b2584588863292a),
		UINT64_C(0x3e7d05d5e89afde4),
		UINT64_C(0x58171422cfdfec83),
		UINT64_C(0xd9a2075d95f868da),
		UINT64_C(0x1da8afd77bdee29b),
		UINT64_C(0x8d25e865fa5d1f41),
		UINT64_C(0x5cad8f0581b90560),
		UINT64_C(0xb8723d6f3e47b827),

		UINT64_C(0xe1e4abe6712a85f9),
		UINT64_C(0x8f0c5a1f19477a43),
		UINT64_C(0x9407dd91b7023406),
		UINT64_C(0x570a67babc5dffa8),
		UINT64_C(0x965a6a2c6308a099),
		UINT64_C(0x7e873487004f9484),
		UINT64_C(0xac9ef8359380d43a),
		UINT64_C(0xaff31969a6d0e11f),

		UINT64_C(0xe4b3607a61f4ebf2),
		UINT64_C(0xd30d436ce815daa6),
		UINT64_C(0xf2ec127dd9b24bc0),
		UINT64_C(0x29d24cc261e39f76),
		UINT64_C(0xfdf4d684c0def5a4),
		UINT64_C(0x3a91401a9f01288d),
		UINT64_C(0x3d8f6a35d8bc4aaf),
		UINT64_C(0x125dd19b7b757b2c),

		UINT64_C(0xbe494ce02ed6499d),
		UINT64_C(0x1880774dacc00e63),
		UINT64_C(0x0440f9561070c655),
		UINT64_C(0xac5d0be114b6a229),
		UINT64_C(0xdb3375c59bf08566),
		UINT64_C(0xa10ced9c93388160),
		UINT64_C(0x54a4dad59cc2c007),
		UINT64_C(0x559408bc146bbebd),

		UINT64_C(0xb8bad0664b209c79),
		UINT64_C(0xbf586f0e24fefe87),
		UINT64_C(0xec6d94b7a39286d1),
		UINT64_C(0xed7c1459a5dc2519),
		UINT64_C(0x4978282330d42273),
		UINT64_C(0x0ff3fd26a98417ca),
		UINT64_C(0xf26c9f7ae2b230b5),
		UINT64_C(0x8c94dbd31f38dfbf),

		UINT64_C(0xd5a3e7288ebf4c96),
		UINT64_C(0x6e3944a9cd85a4c5),
		UINT64_C(0xba9c4bc7e7b5c9d9),
		UINT64_C(0x33e8ebb8ab9dca03),
		UINT64_C(0xaa2c2de0783569d0),
		UINT64_C(0x2b85abd021bf9d89),
		UINT64_C(0xa439c8d9600cd247),
		UINT64_C(0x622af17e71ccf035),

		UINT64_C(0x2d5461656222a132),
		UINT64_C(0x757de25d90c312b2),
		UINT64_C(0x5bf4142296887e24),
		UINT64_C(0x1f57f40b682dfae4),
		UINT64_C(0x5900905f7327b2fa),
		UINT64_C(0x55d3cee7500a070a),
		UINT64_C(0x28431e31c56377f6),
		UINT64_C(0xf2bac6ac56be5bd0),
	},
	// WhiteBishop
	{
		UINT64_C(0xdf46c89083b67e29),
		UINT64_C(0x0a79e77d5e82473b),
		UINT64_C(0x1acf90d006f2a77f),
		UINT64_C(0x0161a43fe951ed4e),
		UINT64_C(0x684fe4624c50d017),
		UINT64_C(0x9d56130f929b7b28),
		UINT64_C(0x5612e8d14194e557),
		UINT64_C(0x8317bf19e7c0ec61),

		UINT64_C(0x4bed0c56e8ae7c16),
		UINT64_C(0x6524d908ba6fd75a),
		UINT64_C(0xef1a4afc64d2dec2),
		UINT64_C(0xcc91a06a6aed0e5b),
		UINT64_C(0x0e8caf25e2e3131f),
		UINT64_C(0xc682ff6ccc7fbce9),
		UINT64_C(0xb90a317118687ab2),
		UINT64_C(0x483fdd9d5943b01b),

		UINT64_C(0xd9ab9bfdcab982e4),
		UINT64_C(0x8c36670af77644c3),
		UINT64_C(0xbeec4e0f0681b526),
		UINT64_C(0xeba28e747d18b8f0),
		UINT64_C(0x2e101a99326fea47),
		UINT64_C(0xddda32425f702ea0),
		UINT64_C(0xc0b14cad105e3672),
		UINT64_C(0x359cd242522f1563),

		UINT64_C(0xd6affd6dc37876be),
		UINT64_C(0x35bda8df5ead1224),
		UINT64_C(0xc20e838ad96bba45),
		UINT64_C(0x92291e135d8e98f1),
		UINT64_C(0xd4d628339ae65ffc),
		UINT64_C(0xfeccbee630743e10),
		UINT64_C(0x58e92ff7f6be6df2),
		UINT64_C(0x1e57637797590664),

		UINT64_C(0x7203145c2f63a685),
		UINT64_C(0x8fec2a2b0bead59d),
		UINT64_C(0xdd56487be5b8c600),
		UINT64_C(0x8b11513f987dc92c),
		UINT64_C(0x1594970f9cab8f30),
		UINT64_C(0x1bb5f0ea58bfeff2),
		UINT64_C(0x42ff96fc97d2ebd4),
		UINT64_C(0x7cb5664988b73c3f),

		UINT64_C(0xf27eb6647cd62c13),
		UINT64_C(0x30a27ac7b6107567),
		UINT64_C(0xeaf3b797f5e00eba),
		UINT64_C(0xd35e513359631e1f),
		UINT64_C(0xc9f7f89c795c345c),
		UINT64_C(0xf400f0cb9df71b18),
		UINT64_C(0xc82d0a7de2b8c037),
		UINT64_C(0xf79bf08329ee7b74),

		UINT64_C(0xcf53f738e1b27b1f),
		UINT64_C(0x949207eb00202221),
		UINT64_C(0xb0aac2d90efef7a7),
		UINT64_C(0x67144a43ef08d0ab),
		UINT64_C(0xb58a58edfc076d67),
		UINT64_C(0xc18306361a8ae880),
		UINT64_C(0x900136708271a8d7),
		UINT64_C(0x4c62781522d048eb),

		UINT64_C(0x62f096438e887dee),
		UINT64_C(0xf35dd72cab848b30),
		UINT64_C(0x94e3a6cdb64a1d46),
		UINT64_C(0x38a2d0bfa0bbcb49),
		UINT64_C(0x1e2e21c184b7a78d),
		UINT64_C(0xcaabdc94b883b7c4),
		UINT64_C(0xe730d8e63586e008),
		UINT64_C(0x9b46fc7effbf9fac),
	},
	// WhiteKnight
	{
		UINT64_C(0xf3c9da6687146357),
		UINT64_C(0xbc0fc65dbeb389bc),
		UINT64_C(0x9be6bbd61f09bf49),
		UINT64_C(0x2140339ed7c11b99),
		UINT64_C(0x6fc48df6290562cd),
		UINT64_C(0x380b4bff46db1f22),
		UINT64_C(0x1ada26b72231ccb5),
		UINT64_C(0x705a1f7bdedaa01e),

		UINT64_C(0xa2d620ab9407e5d0),
		UINT64_C(0x67ab1673e4980aea),
		UINT64_C(0xafc2252962d550a4),
		UINT64_C(0xf3dfaf76b775c562),
		UINT64_C(0x5ccbef3d0397c662),
		UINT64_C(0x01b3b57a62eeae95),
		UINT64_C(0xaec1518190e067c5),
		UINT64_C(0x37488a3d36314db2),

		UINT64_C(0x961eff8f15d8504a),
		UINT64_C(0x64ff8e2e721a603c),
		UINT64_C(0x681143138be3ec55),
		UINT64_C(0x5ecbdb18d4c08510),
		UINT64_C(0xd2c8dd0b141f60b8),
		UINT64_C(0x90906cc9ba81725f),
		UINT64_C(0x6e6ceecf99b39cda),
		UINT64_C(0x3833b12c83573c84),

		UINT64_C(0x77d6cce0c53d35c6),
		UINT64_C(0xeaec84bd94c7a906),
		UINT64_C(0x4e438c6201dfe450),
		UINT64_C(0xe01676f81ef373d3),
		UINT64_C(0x90b2023a3ee105ae),
		UINT64_C(0x6d8598e2dc2a22cb),
		UINT64_C(0x7aec68a3a3616522),
		UINT64_C(0xd2751bc8535dcec1),

		UINT64_C(0x5220c84bb8c51285),
		UINT64_C(0x57810a9091810fbd),
		UINT64_C(0x71a46e32f4e57778),
		UINT64_C(0x04b44d5b5d146bfc),
		UINT64_C(0x2943475171c4730c),
		UINT64_C(0x422be94e746cea55),
		UINT64_C(0x2696be9f46720f2f),
		UINT64_C(0x34588bcf5b61c2bc),

		UINT64_C(0xdcd4a8018a685369),
		UINT64_C(0x59e93e1485a41634),
		UINT64_C(0xc31571199e9eb91b),
		UINT64_C(0x4ffe620332c7095b),
		UINT64_C(0x4bac0fa0a2cf284d),
		UINT64_C(0x1c035a2a33cefe8f),
		UINT64_C(0x0d6ae8360e511267),
		UINT64_C(0xc9cc8849a2a35773),

		UINT64_C(0xc880c44800e4b171),
		UINT64_C(0x4657625b07c46cba),
		UINT64_C(0x9e9cae5ad99cf4bd),
		UINT64_C(0xbcda94886adc4193),
		UINT64_C(0x969c91aed057979e),
		UINT64_C(0x45f618b5564b7b33),
		UINT64_C(0x8e7c8c99777ef253),
		UINT64_C(0x8e9e9771832e577d),

		UINT64_C(0x91dde22a9480b4bd),
		UINT64_C(0x70ddf3148befa451),
		UINT64_C(0x10b84400fa414520),
		UINT64_C(0xbc5a066b606baf65),
		UINT64_C(0x514dd10b07527017),
		UINT64_C(0xcbab54a0ff2c2a98),
		UINT64_C(0xfd7421297472cf1b),
		UINT64_C(0x59f1839342ef0fb7),
	},
	// WhitePawn
	{
		UINT64_C(0xc75866298a6e4bac),
		UINT64_C(0xc8ee38b2898619e0),
		UINT64_C(0x7f979c89244eb074),
		UINT64_C(0x6dfe79552a503ae7),
		UINT64_C(0x84e2657e2ef4ea59),
		UINT64_C(0x5212c47457504706),
		UINT64_C(0xc2d6c23f1ff0fbd8),
		UINT64_C(0xead331b5f2fbe7cc),

		UINT64_C(0x196b78ae8fab6cec),
		UINT64_C(0x82e9b89e64e183d4),
		UINT64_C(0xedf8a811a8525983),
		UINT64_C(0x81401e0a707f4a2a),
		UINT64_C(0xe97db9ef64670a17),
		UINT64_C(0xdca4e599aa2b2046),
		UINT64_C(0x55997b5728384a93),
		UINT64_C(0x0efea3f38b47dc02),

		UINT64_C(0xf7715d0117066b50),
		UINT64_C(0x202f640d407c7784),
		UINT64_C(0x41fc2d1db8d2c58a),
		UINT64_C(0xf1aea04995261294),
		UINT64_C(0x1b97ca9b94818e5c),
		UINT64_C(0x1a604d81c6832882),
		UINT64_C(0x29de3de90ec4b09c),
		UINT64_C(0x833b362a95d350cc),

		UINT64_C(0x92bb628c33d0c1a6),
		UINT64_C(0x17b218339404dff9),
		UINT64_C(0x8ecc53ee80c128fd),
		UINT64_C(0xde322a7a6d6d0b7f),
		UINT64_C(0x9a1bf2c58b17b96d),
		UINT64_C(0x46841b0080569274),
		UINT64_C(0x175635b631158926),
		UINT64_C(0x97e00b81c49f16a7),

		UINT64_C(0x0b0b7c04c7b91bbf),
		UINT64_C(0x07b6f44fe486244c),
		UINT64_C(0x6e3abe3d9168fa01),
		UINT64_C(0xb8e6064f060e9848),
		UINT64_C(0x9a7407276634a98f),
		UINT64_C(0x08dddb9a33d0af4c),
		UINT64_C(0xf48074674a428565),
		UINT64_C(0x4c42426a115ca77c),

		UINT64_C(0x2e476b77c7666bad),
		UINT64_C(0x3ff12da796160fa8),
		UINT64_C(0xb6b1986a2ecba623),
		UINT64_C(0x1e5bf26bac6a2cc8),
		UINT64_C(0xe854e404456189d7),
		UINT64_C(0xa6bc5714b0e06a85),
		UINT64_C(0xd94634b1c5575759),
		UINT64_C(0x22edb1d386f7a76b),

		UINT64_C(0x05425da975aa39f5),
		UINT64_C(0x6ad785b5f1cb9ba3),
		UINT64_C(0x92f67a06e954aa6c),
		UINT64_C(0x808537a95a748260),
		UINT64_C(0x6cf997acd7762b1c),
		UINT64_C(0x61bb904dbec76cc7),
		UINT64_C(0xd3646f8af70ef000),
		UINT64_C(0xdcff1f6ef367b6ea),

		UINT64_C(0xf66e9417cc7b0cae),
		UINT64_C(0x8399ddcbbcc6a55c),
		UINT64_C(0xb3f777be95923c1c),
		UINT64_C(0x6386d01553c46e6d),
		UINT64_C(0x1d342f505e226825),
		UINT64_C(0x8c484323c0c0c008),
		UINT64_C(0x7a7acbc76ac93bdc),
		UINT64_C(0x5c61d0590ea1a132),
	},
	// Empty
	{
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
	},
	// Empty
	{
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
	},
	// BlackKing
	{
		UINT64_C(0x2f64bef8708ccc76),
		UINT64_C(0x8f69cb123b86b473),
		UINT64_C(0x14629d43439b0b9a),
		UINT64_C(0xb51615b61addd932),
		UINT64_C(0x56083fb3f25972d2),
		UINT64_C(0x5824911f1514af24),
		UINT64_C(0xcc31f9a300cd86fb),
		UINT64_C(0x106f10489953b0f0),

		UINT64_C(0x4e0da08ed53e3f42),
		UINT64_C(0x861454c96e778a89),
		UINT64_C(0x85fa8e9cb37aebe4),
		UINT64_C(0x185f7b31ecc2b80f),
		UINT64_C(0x77b4840c225dba24),
		UINT64_C(0x21f3044fd95b9644),
		UINT64_C(0xb10b52c194b80c12),
		UINT64_C(0xd3511042b3dc6e17),

		UINT64_C(0x127c6a623e7a8096),
		UINT64_C(0xac40b42d23979b50),
		UINT64_C(0x24eaf6e4d79f81dd),
		UINT64_C(0xc188cff8736251b9),
		UINT64_C(0x12392eb101fe558e),
		UINT64_C(0x02e402c80d947c34),
		UINT64_C(0x8b9d039619325a97),
		UINT64_C(0x5d9b0636b0704c83),

		UINT64_C(0x8a94b7d08b8d601d),
		UINT64_C(0x5733a1895681c0aa),
		UINT64_C(0xdd5a40d653d15e74),
		UINT64_C(0xbb054e3cf7ccbacd),
		UINT64_C(0x6e4b27ff19f158fb),
		UINT64_C(0x41e3901659df0572),
		UINT64_C(0xf6e26bfacb2b1d27),
		UINT64_C(0x4fefc0f2472ecd13),

		UINT64_C(0x3e27d9ba892b921e),
		UINT64_C(0x948f060bc89c832a),
		UINT64_C(0x8baa3f0efc1c2af2),
		UINT64_C(0x2381a923ba396109),
		UINT64_C(0xd3b06958774253f0),
		UINT64_C(0x0b445b670f7c832e),
		UINT64_C(0xa2be518eb068da7c),
		UINT64_C(0x3bbb38d5b2cdd554),

		UINT64_C(0x1da3d990a138c7b6),
		UINT64_C(0xc8e233f9accae801),
		UINT64_C(0xa05e74f15d3eeef5),
		UINT64_C(0xfea7f74d1c9bcaff),
		UINT64_C(0xae0b4bfcf6a32afa),
		UINT64_C(0x6be0332e6af8a0cf),
		UINT64_C(0x943177446ddd6775),
		UINT64_C(0xba0da641f019b36e),

		UINT64_C(0x384025f9ab18fbba),
		UINT64_C(0x1939888bb6674ce0),
		UINT64_C(0x59e11e6d2f07fa4b),
		UINT64_C(0xa596f492bd8f9bca),
		UINT64_C(0xe939068dd320fec1),
		UINT64_C(0x00dcc4c3618c975c),
		UINT64_C(0x0486fcb60f496caa),
		UINT64_C(0xcd6e638cc3106b1a),

		UINT64_C(0x28b8c5a56fc98845),
		UINT64_C(0x349ddc52f07e66d6),
		UINT64_C(0xdc5b17f35598ab96),
		UINT64_C(0x536c255baf56d4ec),
		UINT64_C(0x7d58b9aa06d26aa3),
		UINT64_C(0xc479e0c6ddbc2a4e),
		UINT64_C(0x0668cbed0f5dcbea),
		UINT64_C(0x751054ba6613a289),
	},
	// BlackQueen
	{
		UINT64_C(0x03c7280b077d6d7a),
		UINT64_C(0xe12382c91253cda1),
		UINT64_C(0xbefda033140e3cb7),
		UINT64_C(0x1b6f806491b094b5),
		UINT64_C(0x1e98babfcc965316),
		UINT64_C(0x57d2ade56704a531),
		UINT64_C(0xd54fc0a170ffd7aa),
		UINT64_C(0x354ead717998c00d),

		UINT64_C(0xeae96f6e4b1508c1),
		UINT64_C(0x7c0dc22bf8632b40),
		UINT64_C(0x83bc6818b369f89a),
		UINT64_C(0x4efc4febd26e4b42),
		UINT64_C(0xf8ceefc9feb1874f),
		UINT64_C(0xf845bec6c1ccf8a0),
		UINT64_C(0x3e2b5a324714c3bb),
		UINT64_C(0x1d9eab2892b42859),

		UINT64_C(0xb25280c92f83b2a2),
		UINT64_C(0xeff78ea70b1c5e36),
		UINT64_C(0x6d4de2bb930efe72),
		UINT64_C(0x64b95da4f88ca989),
		UINT64_C(0xfac373fc552add76),
		UINT64_C(0x3c841f46705e8b18),
		UINT64_C(0xc32fb541343401f9),
		UINT64_C(0xf2c11cce7a469839),

		UINT64_C(0xb817729006c14c65),
		UINT64_C(0x1071ec724569f6af),
		UINT64_C(0x621edfa9de9439e7),
		UINT64_C(0x1a22c4d5150f2baa),
		UINT64_C(0x75cca15a55258a3d),
		UINT64_C(0x24f570d7d46087f1),
		UINT64_C(0x73a8a9518592ea87),
		UINT64_C(0x925f5b9e52691f97),

		UINT64_C(0xb9b2c60211b8ee24),
		UINT64_C(0x4308bc03f750dbc6),
		UINT64_C(0xfc913f36d178361f),
		UINT64_C(0x63322686eb9ad5fa),
		UINT64_C(0x58a258ad8bfe49ce),
		UINT64_C(0x6e58e93d4969b576),
		UINT64_C(0x4cfdeb892f7103d9),
		UINT64_C(0xe6d396b7019b60fa),

		UINT64_C(0x891d9d8a680b0fe9),
		UINT64_C(0x3af29f54df3c8952),
		UINT64_C(0x4e4ab77a442734fe),
		UINT64_C(0x6e9ee2c78557d228),
		UINT64_C(0x39205e41d0b4f1bd),
		UINT64_C(0x2d7afbfd5b402083),
		UINT64_C(0xefaaa35cfcb13cd3),
		UINT64_C(0xd5eb1dcb6c10d071),

		UINT64_C(0xec6670a35fef81f5),
		UINT64_C(0xec28f44e30a9996c),
		UINT64_C(0x20f1adb9f2960c1e),
		UINT64_C(0x6d0d8e411f5845a6),
		UINT64_C(0xa15d0c9740e3a337),
		UINT64_C(0x7e2d2c54bff916f2),
		UINT64_C(0x2af10716e9691641),
		UINT64_C(0x1dadd22c12ff5b22),

		UINT64_C(0x6ba5819a9948d2c1),
		UINT64_C(0x415fc03a15510c4d),
		UINT64_C(0x40a4b22bdc58b560),
		UINT64_C(0x6b94dc456fc3dca1),
		UINT64_C(0xbc04ae725dca44cd),
		UINT64_C(0x851229741d509353),
		UINT64_C(0xdfa93ba511ed67a5),
		UINT64_C(0x9930157fc5022cce),
	},
	// BlackRook
	{
		UINT64_C(0xa14f64e7e2a08adf),
		UINT64_C(0x6b642680b3befe04),
		UINT64_C(0xa5cec9da49db1e5b),
		UINT64_C(0xc8a4791b8796b72b),
		UINT64_C(0x96dcda1732dac346),
		UINT64_C(0xdd6a468b90154135),
		UINT64_C(0xc92cf06b2f7cec8b),
		UINT64_C(0x49fdd61b76fb21c1),

		UINT64_C(0x952d68a7d37cbdd1),
		UINT64_C(0x1d02dca5ecce6696),
		UINT64_C(0x7947464767cc4eb1),
		UINT64_C(0xbc5690e29707fd78),
		UINT64_C(0x1b77de938eb37a92),
		UINT64_C(0x82a0316874d3f3b4),
		UINT64_C(0x0438b0002bc65e99),
		UINT64_C(0xf7165ab04168fe6d),

		UINT64_C(0x333d75259eefcd14),
		UINT64_C(0x8906c3ac02d0bea4),
		UINT64_C(0xffd91e4fe65f12e9),
		UINT64_C(0xc14b1bf2982e4aed),
		UINT64_C(0x35d83daf48cfe68f),
		UINT64_C(0x9ec31949cd275677),
		UINT64_C(0x2c3ee7e34b57d352),
		UINT64_C(0x94660b0b00324807),

		UINT64_C(0x3f7e45098859afce),
		UINT64_C(0x69a26300773711d6),
		UINT64_C(0xfcf669991e52df6b),
		UINT64_C(0xe9fe0aec1acf55b5),
		UINT64_C(0x6a22ade2d0520453),
		UINT64_C(0x79b4957bf7ad0aaa),
		UINT64_C(0x10bd4cdb980db736),
		UINT64_C(0xf851ceac6b23657f),

		UINT64_C(0xad9451efea678535),
		UINT64_C(0x5646fc2f7a3ccca8),
		UINT64_C(0x12501485c46afe0b),
		UINT64_C(0xe44bf524b8fe2551),
		UINT64_C(0xc7b072886b0fd978),
		UINT64_C(0x2c29835d87188eeb),
		UINT64_C(0xebd902fb34841eca),
		UINT64_C(0xbc8da25aafd4c949),

		UINT64_C(0xe8e2f478103c805c),
		UINT64_C(0xf4bfa9cbd7ed9c07),
		UINT64_C(0xac7f6a4adad8b297),
		UINT64_C(0xbd209ad1b5f145ba),
		UINT64_C(0x4f9d4c0a69871173),
		UINT64_C(0xf6e28f3f8b89aebc),
		UINT64_C(0x4b13bc67fe616132),
		UINT64_C(0xcfe6c79ca07bb7bc),

		UINT64_C(0x80a3f66f2c6a0eff),
		UINT64_C(0xe3afb253772a75fc),
		UINT64_C(0xf40c5da6637f1c4d),
		UINT64_C(0x29002c86cc15c154),
		UINT64_C(0x4dfe86a1b23ee0d9),
		UINT64_C(0x65622cdf439dec74),
		UINT64_C(0x30fda6a5933ffba0),
		UINT64_C(0x960092fd4722f32b),

		UINT64_C(0x4ab30ab6a72584cb),
		UINT64_C(0xc74a9ae8575cdeeb),
		UINT64_C(0x2e04317419a09c84),
		UINT64_C(0x49c487bc3b339189),
		UINT64_C(0xf1e89841c5586c04),
		UINT64_C(0x618a5d4557a060db),
		UINT64_C(0x67b1f2b29381993c),
		UINT64_C(0xdac343bda84599fd),
	},
	// BlackBishop
	{
		UINT64_C(0xebff8b8df3c83a0a),
		UINT64_C(0xf9942b8463438981),
		UINT64_C(0x6c2f8a36722bbac5),
		UINT64_C(0xa7cae83f1120ef53),
		UINT64_C(0x6be91f12cdd0ca04),
		UINT64_C(0xc441e4b94cecfb40),
		UINT64_C(0xcadae4afd1198c20),
		UINT64_C(0x47d6c333e59f0d9b),

		UINT64_C(0x1c7fe4e60648c3bd),
		UINT64_C(0xf61d326de86eab61),
		UINT64_C(0x71ea832569a032f7),
		UINT64_C(0x27b805c6b65ae940),
		UINT64_C(0x4ab0f7d8436b08dc),
		UINT64_C(0xd7709084e3c83ba6),
		UINT64_C(0xeda91d50da13848d),
		UINT64_C(0x8540270732c408e0),

		UINT64_C(0x35efdcdef2789841),
		UINT64_C(0xf937151d7d7be252),
		UINT64_C(0xe95c415b888c8aec),
		UINT64_C(0x171a6366a0e1271b),
		UINT64_C(0x9149c05e04f7036c),
		UINT64_C(0x414f8230851b4649),
		UINT64_C(0xfb51808713dc84ba),
		UINT64_C(0xf933e08fb5dfaebc),

		UINT64_C(0x28254a305cc7753f),
		UINT64_C(0x6e9300d69c44cb1b),
		UINT64_C(0x1fed087462b8e3c9),
		UINT64_C(0x311931c6cc9d371f),
		UINT64_C(0x0ab3c7d461118dc9),
		UINT64_C(0x9f67ffd0d3815586),
		UINT64_C(0x8586a78a5a5d0daa),
		UINT64_C(0xc35e56c16ad732e8),

		UINT64_C(0x5dec4f660f327eb4),
		UINT64_C(0xbeca79c300886406),
		UINT64_C(0xaad304bb2ea3f914),
		UINT64_C(0x4f6aec0ed980ff6f),
		UINT64_C(0x1ddf22d9fbb4a2f0),
		UINT64_C(0x0a5faf84525bab3e),
		UINT64_C(0x0b2f339ac1074ead),
		UINT64_C(0xceeb55e80a6a92c2),

		UINT64_C(0x8a439d961671da6f),
		UINT64_C(0x66467b94b6de5d2f),
		UINT64_C(0x21505ba132d4907d),
		UINT64_C(0x34c443b890fac25f),
		UINT64_C(0x48c89fd2e655cdf9),
		UINT64_C(0x15897d714819c7e6),
		UINT64_C(0xf7a8f3d223780746),
		UINT64_C(0x6778549c3bbb486b),

		UINT64_C(0x889aeb3bf2632b9a),
		UINT64_C(0xcb8fb06abda385ff),
		UINT64_C(0x502d1ab72f606c48),
		UINT64_C(0x29b34ae2ff2c21a9),
		UINT64_C(0x5f6942a552a43ba1),
		UINT64_C(0xd9b44265023be3d7),
		UINT64_C(0x29081045ed355455),
		UINT64_C(0x2f915936359af5a0),

		UINT64_C(0x6c3889068abe571c),
		UINT64_C(0x97b66c46539aa106),
		UINT64_C(0xec346e6de2e3f311),
		UINT64_C(0x6aadba9193ad40f6),
		UINT64_C(0xd835cf0ef3a71198),
		UINT64_C(0x10e62386c249b3fc),
		UINT64_C(0x1cd290d68761f8e2),
		UINT64_C(0xb8337434d4e694e1),
	},
	// BlackKnight
	{
		UINT64_C(0xbd77a59f1d361ebb),
		UINT64_C(0x3fd63cdae63a60cf),
		UINT64_C(0xabbde3878f5d3ddc),
		UINT64_C(0x7bd30af727464ee0),
		UINT64_C(0xc54b2e6fd776f8ec),
		UINT64_C(0x87536cc23efddac8),
		UINT64_C(0xa673f8fea0989c7a),
		UINT64_C(0x07079efe6a0393e1),

		UINT64_C(0xd59ef63e8c0a3f87),
		UINT64_C(0x275f3761c2b39d86),
		UINT64_C(0xabb109a58d81d722),
		UINT64_C(0x6fa8223d3df3b5a3),
		UINT64_C(0xc21d3f51d871af26),
		UINT64_C(0x09d5c9fc29803819),
		UINT64_C(0x866d72e99c8219c0),
		UINT64_C(0xf903690329ec9854),

		UINT64_C(0x463c5862fd725e53),
		UINT64_C(0xfaa2e3b9009c23ff),
		UINT64_C(0x51ed3fa38b3e32e1),
		UINT64_C(0x3fdd054ae621b7a9),
		UINT64_C(0x63422f3c0fcdb872),
		UINT64_C(0xdb599cddb7ba5bb7),
		UINT64_C(0x29d821145131732f),
		UINT64_C(0xa768e7bd756f318c),

		UINT64_C(0x6c499d80db10e3f2),
		UINT64_C(0x1ccb5e0f3dfd948e),
		UINT64_C(0xe59cdfdfde9ae15f),
		UINT64_C(0x9d490cddfef6d223),
		UINT64_C(0xb8985e20b3c308b5),
		UINT64_C(0xca4145a21a50a82a),
		UINT64_C(0xefa50915dbc7e668),
		UINT64_C(0x66c706d2ddde9849),

		UINT64_C(0x9ce9a5932d0364d2),
		UINT64_C(0x9686b7e5e8901ff7),
		UINT64_C(0xa9a42437501eaad7),
		UINT64_C(0x20679ed4ada474e1),
		UINT64_C(0x367a3bbc6c11bba2),
		UINT64_C(0xe4cfc9c30e06a14d),
		UINT64_C(0xc589b195c383ecfd),
		UINT64_C(0x841ce907bbb6a61c),

		UINT64_C(0x3d731ef371ea6132),
		UINT64_C(0xab7a347deeedc48a),
		UINT64_C(0xa5ba154bec151ef8),
		UINT64_C(0x17726f865e2ee581),
		UINT64_C(0xdbca0e729ac306f2),
		UINT64_C(0xf7ee9f7dbf54f4d7),
		UINT64_C(0x6c10670c9169452e),
		UINT64_C(0x5a49ee9a2bc1486f),

		UINT64_C(0x23630d9bff542959),
		UINT64_C(0xdcb2d15124939ab9),
		UINT64_C(0xa5de1bef76950515),
		UINT64_C(0x730f408f5dc85968),
		UINT64_C(0xd8c24e6721021521),
		UINT64_C(0xe61242e7661ab160),
		UINT64_C(0xceb3901956105e41),
		UINT64_C(0x09a56e7a2a9b7040),

		UINT64_C(0x6dddfaced358af91),
		UINT64_C(0x6d597db8d1caf88d),
		UINT64_C(0x7dfa62e1b1760d84),
		UINT64_C(0x08e19fa60dfeb1bf),
		UINT64_C(0xa34875d78b045e7e),
		UINT64_C(0x0a294952e7727e87),
		UINT64_C(0xac7d17ef5e7b791a),
		UINT64_C(0x51d95a618d846d91),
	},
	// BlackPawn
	{
		UINT64_C(0xc58896c783248e00),
		UINT64_C(0xb28c400d0e64ade8),
		UINT64_C(0xc41ecb9b99a69765),
		UINT64_C(0xa1bcd8aae00885c1),
		UINT64_C(0xd66f8316f2155659),
		UINT64_C(0x8eeb7bcc71816ad0),
		UINT64_C(0xc0fd3c6163d7ca66),
		UINT64_C(0x3483cad9e03c498e),

		UINT64_C(0x797e845514e40aec),
		UINT64_C(0x9213f80bf739746d),
		UINT64_C(0x6effa9a6b1ea0966),
		UINT64_C(0xecf7c1c9d0e33dba),
		UINT64_C(0x244b3a0a6a1914d3),
		UINT64_C(0x6ff19fb917323431),
		UINT64_C(0x1fed9c34d7fa3bfe),
		UINT64_C(0xc374c9f28e32936a),

		UINT64_C(0x82e29126f964e26e),
		UINT64_C(0x5e19b04bcae033ab),
		UINT64_C(0x8e843603dbe6f7c4),
		UINT64_C(0xa69036d38dc44fa7),
		UINT64_C(0xdc8900d3ffe9bb33),
		UINT64_C(0x7df691fb44c14455),
		UINT64_C(0x8db41acc4e059813),
		UINT64_C(0x9b2d3d0de5b20868),

		UINT64_C(0x4b39506de2dc33e8),
		UINT64_C(0x497fa4ddbb3b07ce),
		UINT64_C(0x6c5debfda2c4ba40),
		UINT64_C(0x8fdbde6d48bf1975),
		UINT64_C(0xff2f49b04059933f),
		UINT64_C(0xecbe4f65b27376f4),
		UINT64_C(0x2721d3581a8b968c),
		UINT64_C(0x1a24f47aac88d68b),

		UINT64_C(0x789e285d63687859),
		UINT64_C(0x90d51721750bfb72),
		UINT64_C(0x6ec71da00ade928f),
		UINT64_C(0xf30d9e21516cb984),
		UINT64_C(0x26e15240e445a13b),
		UINT64_C(0x1f2c3c30333f106d),
		UINT64_C(0xc112f0277a1d8d9e),
		UINT64_C(0xb8ded447d7ac9df4),

		UINT64_C(0xec3468c53d70f8e2),
		UINT64_C(0xc2762a9062b4fd52),
		UINT64_C(0x125a697ea5c928fc),
		UINT64_C(0x699ccbae2e951159),
		UINT64_C(0xb84b2eebee507f54),
		UINT64_C(0x3f758e5dc86257e0),
		UINT64_C(0x98cce7a224a0ec87),
		UINT64_C(0x9c664fde6084eb02),

		UINT64_C(0xd0fc175ca6c00b3f),
		UINT64_C(0xab97afa35e0176ee),
		UINT64_C(0xc33d3e3c9d339042),
		UINT64_C(0xdb4d05320bec3d50),
		UINT64_C(0x039be4f2ea598bb3),
		UINT64_C(0x82f71649af9e5b54),
		UINT64_C(0xa314e81e7bdd8915),
		UINT64_C(0xef47b0e2d07c4d8e),

		UINT64_C(0xc95b40effdb0f22f),
		UINT64_C(0xc388499302f30a22),
		UINT64_C(0xff906154a95d03a7),
		UINT64_C(0x9d33ff38637e7a05),
		UINT64_C(0x2552ea8ad2b403cd),
		UINT64_C(0x5e613aa2d28e5a87),
		UINT64_C(0x004ec1298ccbd07a),
		UINT64_C(0x8315aeb53c3d81ce),
	},
#else // alternative set
	// Empty
	{
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
	},
	// WhiteKing
	{
		UINT64_C(0x2a5417a98307b2da),
		UINT64_C(0x5ac95aaf5b5a0a8c),
		UINT64_C(0x04242b999ccb11fd),
		UINT64_C(0xa37501fe898e0e78),
		UINT64_C(0x9a94bcea9e2da76b),
		UINT64_C(0xc7ce19cc5e802f83),
		UINT64_C(0x45eeced5b680b2cb),
		UINT64_C(0xadb6adad23017434),

		UINT64_C(0x80800ecc4d2b87a9),
		UINT64_C(0x0642f6c3b25f7815),
		UINT64_C(0x36bee3949859adc4),
		UINT64_C(0xbf7edddd305cd3e4),
		UINT64_C(0xdc832abd4ffa5cb6),
		UINT64_C(0x93633b3bfd69c313),
		UINT64_C(0x0ace24bbc5c3b597),
		UINT64_C(0x15b724f37500f32b),

		UINT64_C(0xf8757ae36e0f7ad7),
		UINT64_C(0x61ad06851f14a2d2),
		UINT64_C(0x71305111983c5848),
		UINT64_C(0x2312fe7b04ecc10e),
		UINT64_C(0xa83a7e4426b47c5c),
		UINT64_C(0x57273697f8db1fe1),
		UINT64_C(0x1ba0df2ee5b42a5f),
		UINT64_C(0xad7c2a49bc87d869),

		UINT64_C(0x0a0c2390e8cb1f3b),
		UINT64_C(0xc88205c839aa498d),
		UINT64_C(0xb0d939c06b5cb858),
		UINT64_C(0xe07cec7f3264f226),
		UINT64_C(0x6e33f7d923c0732b),
		UINT64_C(0xe8203d23af991c54),
		UINT64_C(0x1c99f6b4cf6f670c),
		UINT64_C(0x44e4ec3c02e0a04b),

		UINT64_C(0xc6ae9553cc99e7c0),
		UINT64_C(0x449b73fe112a976a),
		UINT64_C(0x5c3102046f66a5da),
		UINT64_C(0xce6ab6643d315942),
		UINT64_C(0x2522da9df2455649),
		UINT64_C(0xa353599c1a2e0548),
		UINT64_C(0x47a81c545e59e8a9),
		UINT64_C(0xd20c18c91d0c7da0),

		UINT64_C(0xa7947c53ce8dd184),
		UINT64_C(0x524a385ac5da3912),
		UINT64_C(0x877c13873f329da6),
		UINT64_C(0x16f6860b1bfacd8f),
		UINT64_C(0xe4c71662637278c3),
		UINT64_C(0xaf4505840b228ab5),
		UINT64_C(0x7cf5f4dd43e540e4),
		UINT64_C(0x19d1b3bfcbd55a13),

		UINT64_C(0x5f0e500c0e9d63db),
		UINT64_C(0xdc76fab4b7b3ba9d),
		UINT64_C(0x759ffa59e9523a66),
		UINT64_C(0x9d7cc9cf7b2e1f05),
		UINT64_C(0xf5614ae6f8970008),
		UINT64_C(0x7987f955c2371b60),
		UINT64_C(0x6ca454ef2c36b0b8),
		UINT64_C(0xbf2d843f0342bc09),

		UINT64_C(0x35ea28b097912aeb),
		UINT64_C(0x41e7fb83df8e4c64),
		UINT64_C(0x77db59b0f6e384ca),
		UINT64_C(0xd6e3c5690790b6b8),
		UINT64_C(0x776de83e838ab515),
		UINT64_C(0x6118c9ee6248fe51),
		UINT64_C(0x43111ed3b71e7d0f),
		UINT64_C(0xf10630451923e6ab),
	},
	// WhiteQueen
	{
		UINT64_C(0x565ab14f492f71b4),
		UINT64_C(0x3a76f59247731e03),
		UINT64_C(0x0a358e41c85134db),
		UINT64_C(0x2aa4cf9149d3eeee),
		UINT64_C(0x4b1a708bcd67571c),
		UINT64_C(0x960b91658e4256a5),
		UINT64_C(0xe92d20cc7b215cd1),
		UINT64_C(0x6a17c2b1ff6d49a4),

		UINT64_C(0xc280f23c9628ed6b),
		UINT64_C(0xf5f3babb8223baf5),
		UINT64_C(0xc00174f43aad425c),
		UINT64_C(0x212624c4251f7393),
		UINT64_C(0x209de09fd3e84346),
		UINT64_C(0x0a1adb8f309027c7),
		UINT64_C(0xf5bdfed74bbbe2b5),
		UINT64_C(0xb4a5c1446224e203),

		UINT64_C(0x189b35d7180fefb5),
		UINT64_C(0x8b2c72f8150e4587),
		UINT64_C(0x1196c5cb9e797a9b),
		UINT64_C(0x27b584dae8b2e940),
		UINT64_C(0x79364f768b360ae0),
		UINT64_C(0x171cc6787742c0ad),
		UINT64_C(0xab538219f3d49a73),
		UINT64_C(0xcc82e6842ac5486b),

		UINT64_C(0x8eb33ec2c84c5894),
		UINT64_C(0xc90f46cacfc0229b),
		UINT64_C(0x80ed6a306da6b300),
		UINT64_C(0x566ea1f3681bc906),
		UINT64_C(0xa1dd6add546b62fd),
		UINT64_C(0x4b4e3e160e17a039),
		UINT64_C(0xf5fec0afe974790e),
		UINT64_C(0x6206b04ec9a5be39),

		UINT64_C(0xd1686b1c476e8ee1),
		UINT64_C(0x3e05d0a857bb0b79),
		UINT64_C(0xf861f0b941963817),
		UINT64_C(0xa3bd04a8ae26f2ea),
		UINT64_C(0xb9ef8e89213e0019),
		UINT64_C(0x80496d52af615a37),
		UINT64_C(0xb1bc75fdc72f0dd4),
		UINT64_C(0x06aaf5289dbe9e7a),

		UINT64_C(0x2034b6428849acf8),
		UINT64_C(0x214b79e32484ffd1),
		UINT64_C(0xed8b807ba1d0ba7f),
		UINT64_C(0xb146c7ef65dc112b),
		UINT64_C(0x029273be71456bbf),
		UINT64_C(0xb0c321a881b2978b),
		UINT64_C(0x97e80e566ba19dcf),
		UINT64_C(0xdb8130cd436270bf),

		UINT64_C(0x8390455b1d03ebd4),
		UINT64_C(0x67d87a40f489f971),
		UINT64_C(0x11371562ed0cd5ad),
		UINT64_C(0xc78fc67ea384d066),
		UINT64_C(0xa2c0b78e4160c607),
		UINT64_C(0xec157db9f45f65b8),
		UINT64_C(0x11a23a808020842d),
		UINT64_C(0xf4870065c7cb9058),

		UINT64_C(0xb688f87f37be9f10),
		UINT64_C(0x523904f08e3a1db5),
		UINT64_C(0x6d5547d362630207),
		UINT64_C(0xbe377a2ee9614959),
		UINT64_C(0xa74767500f61e91a),
		UINT64_C(0x59f4428131dfe82b),
		UINT64_C(0xbee2763074345495),
		UINT64_C(0x924a98bc2c03faa3),
	},
	// WhiteRook
	{
		UINT64_C(0xa3f278a8ea3800d6),
		UINT64_C(0x8f95861dc9e88f9c),
		UINT64_C(0xb016c7a699f29eec),
		UINT64_C(0x4f871a0da97bd86d),
		UINT64_C(0x6d70153d9c3926e9),
		UINT64_C(0xf626a9275c8edca7),
		UINT64_C(0xa37b001c2aa636af),
		UINT64_C(0x50552a8f13bf4b67),

		UINT64_C(0x7f506ef8d7583d2d),
		UINT64_C(0x2e1f50f49c4fcb4c),
		UINT64_C(0xfc174306518aadaf),
		UINT64_C(0xa96e138bbaf3b99c),
		UINT64_C(0x26d2537610a1428a),
		UINT64_C(0x5d34b24783e87351),
		UINT64_C(0xbdae7bbc576baf7d),
		UINT64_C(0x0a7386b52075119e),

		UINT64_C(0x902f3d3f11b71bea),
		UINT64_C(0xd6551d6cbd316ebb),
		UINT64_C(0xe22c47438ea26697),
		UINT64_C(0x812ad25de614fc1e),
		UINT64_C(0xd6a0f0961820f99f),
		UINT64_C(0x9213716d4bef80ca),
		UINT64_C(0x978883dde343df7d),
		UINT64_C(0x5c88103619aa30c6),

		UINT64_C(0xfa9cbcc1c7aa786f),
		UINT64_C(0xa4c270ecbe8278b3),
		UINT64_C(0x31ac3dd2c0abd738),
		UINT64_C(0x37774370702023be),
		UINT64_C(0x7df4cf76ade1ef4d),
		UINT64_C(0x25396a494516dec2),
		UINT64_C(0x69fe023ce81dda44),
		UINT64_C(0x9bfa45df4de43313),

		UINT64_C(0x7eb578e49c1b5591),
		UINT64_C(0x33d3f3069234c23a),
		UINT64_C(0x730fe0250e55b1d9),
		UINT64_C(0x683e70b476db9c72),
		UINT64_C(0xe628af7287eb7b22),
		UINT64_C(0x05cc9a853f739944),
		UINT64_C(0x033b1091a8d9831c),
		UINT64_C(0xbcb444793c9aa442),

		UINT64_C(0x610301f6a75e25d6),
		UINT64_C(0xcee84a19312ab772),
		UINT64_C(0xca84e80ce1fb32a0),
		UINT64_C(0x246a9b91d8c018cc),
		UINT64_C(0x0262c8dbef351b7a),
		UINT64_C(0xfb1ff9f4c31a9f26),
		UINT64_C(0xf0792a527dd73b63),
		UINT64_C(0xf44f0208aff4ebdb),

		UINT64_C(0x209bacbad03a0e47),
		UINT64_C(0x976cae0727bcdd47),
		UINT64_C(0xc6268f2a65b666ba),
		UINT64_C(0x9ac2e7adb3078fd1),
		UINT64_C(0x391b492cc69d3d90),
		UINT64_C(0x731b43a7cb531413),
		UINT64_C(0x25fd672d91f1910a),
		UINT64_C(0x6b9f1577ed191584),

		UINT64_C(0x9e98198a9b435198),
		UINT64_C(0xf9211bec7f67b9b6),
		UINT64_C(0x7184259d9eca2d52),
		UINT64_C(0x89b34a0107893fe8),
		UINT64_C(0xb31a7b5beb798123),
		UINT64_C(0xae28248f42709eed),
		UINT64_C(0x5dd7c34ab7d1d05e),
		UINT64_C(0xc993fe8499e8729f),
	},
	// WhiteBishop
	{
		UINT64_C(0x8af2cf20821b1ed6),
		UINT64_C(0xb3d45a42c1eba0b4),
		UINT64_C(0xdab6b5908ca7b6a2),
		UINT64_C(0x1877a332f18884e2),
		UINT64_C(0x9efc385d3fc3f4fc),
		UINT64_C(0x0ebf16323d388b3e),
		UINT64_C(0x097b696a1e4ad73e),
		UINT64_C(0x09ac23b1823568ae),

		UINT64_C(0x370ed86a19d5269e),
		UINT64_C(0x73339a44eb64246e),
		UINT64_C(0xe3004dc320fe9fac),
		UINT64_C(0x04c416001629dde1),
		UINT64_C(0x929c2b1daef7a4c2),
		UINT64_C(0xe084b4b411de4dec),
		UINT64_C(0x07fd8093ccf4f057),
		UINT64_C(0x87f63c8ce96ad1c5),

		UINT64_C(0x7354e0263d16bdcb),
		UINT64_C(0xe6383a502b96c3a6),
		UINT64_C(0x7f2fffb963dca025),
		UINT64_C(0x81fe69658e1c281e),
		UINT64_C(0x54fad66539b919ac),
		UINT64_C(0x881a8e64df80dd01),
		UINT64_C(0x23aec86c61190a69),
		UINT64_C(0x31e87ce13389adde),

		UINT64_C(0xee8e6d85bb237cfc),
		UINT64_C(0x709e7ad92346f2b0),
		UINT64_C(0x4df70546f77dfdd6),
		UINT64_C(0xbf3f90b542d637e1),
		UINT64_C(0x0333505b3d67af4c),
		UINT64_C(0xe1e53fa45bc1f6cc),
		UINT64_C(0xb50331b42af6890d),
		UINT64_C(0xadbdac6c3be7eb14),

		UINT64_C(0xb599a56d460c4819),
		UINT64_C(0x090e68ce5334a496),
		UINT64_C(0x0de5a36b0ca29d6e),
		UINT64_C(0x0e1d83f7011b5495),
		UINT64_C(0xb806b49cde676d1f),
		UINT64_C(0x596415bff969e5ac),
		UINT64_C(0x4ecb33f92391a99d),
		UINT64_C(0x978b3cf87693394c),

		UINT64_C(0x47b7f5d55b0c1b2f),
		UINT64_C(0xadbda5d618bf4fc1),
		UINT64_C(0xd50bc780121a16c6),
		UINT64_C(0xc01c8629fc0b5906),
		UINT64_C(0xc2e96408c1170dac),
		UINT64_C(0xd00268c3c112dd6d),
		UINT64_C(0xb44a2f9833b112b2),
		UINT64_C(0x4ad98b014e331b82),

		UINT64_C(0x960f27e9ca01dffb),
		UINT64_C(0x02c87d28ce4ab8ce),
		UINT64_C(0x1913e6fa55592377),
		UINT64_C(0xb3fc07fd633094c5),
		UINT64_C(0x028d8f3bc1149659),
		UINT64_C(0x17e47e9fcaa101ab),
		UINT64_C(0xec7c64d3f35a93a0),
		UINT64_C(0xa5579af4ef028d6f),

		UINT64_C(0xe866dfd47419c9e9),
		UINT64_C(0x12a90901fd4c1c61),
		UINT64_C(0x4613bfbb58c63015),
		UINT64_C(0x42e4466423c4f286),
		UINT64_C(0x92f6746ca2e50366),
		UINT64_C(0x93002fb08d04a982),
		UINT64_C(0xa7bc2dc031876fe3),
		UINT64_C(0x621169ba9c39dc2b),
	},
	// WhiteKnight
	{
		UINT64_C(0x85a5c445a8c4baf5),
		UINT64_C(0xee64b9c6584a9de8),
		UINT64_C(0xdaa1ed0eba35645a),
		UINT64_C(0x8f5910048cbca322),
		UINT64_C(0x0e570d3024996c3f),
		UINT64_C(0xba4ad47b280f9de7),
		UINT64_C(0x336b7645ac7d0244),
		UINT64_C(0x74c46e492a70974c),

		UINT64_C(0x3352c2984e263343),
		UINT64_C(0xb13d1482d3318812),
		UINT64_C(0xd8f384157b12b62d),
		UINT64_C(0xde5eb19a00393c01),
		UINT64_C(0xd882afd8cf70261a),
		UINT64_C(0xa3c47c92d627ce3c),
		UINT64_C(0xb53c09a30bab17c4),
		UINT64_C(0xaec14792f9613a68),

		UINT64_C(0xb06f91968cfc4f70),
		UINT64_C(0xe577859b7affd561),
		UINT64_C(0x61cc445d91fed085),
		UINT64_C(0x2c43b923c3b6193c),
		UINT64_C(0x9c3d4b4945169e8f),
		UINT64_C(0xbdb629528c1fa4e3),
		UINT64_C(0x765764f75e136a25),
		UINT64_C(0x9d6876cc28c40323),

		UINT64_C(0x4f6710cb56ff4e1d),
		UINT64_C(0x67c4537ad1694c9e),
		UINT64_C(0x2a398547bae7973c),
		UINT64_C(0xa9a31125194853b4),
		UINT64_C(0x481484b747893358),
		UINT64_C(0x7159a6b0047670ff),
		UINT64_C(0x2a20f6513c4c6164),
		UINT64_C(0x8e4f9f6826a7d069),

		UINT64_C(0xa8986bbb3a03b4be),
		UINT64_C(0x2897848201586d82),
		UINT64_C(0x4a350cfdbf731566),
		UINT64_C(0x0da2a5d4fcf86b91),
		UINT64_C(0xc906ebab5484492b),
		UINT64_C(0x15873698e510c12d),
		UINT64_C(0x4d782314d1071fdd),
		UINT64_C(0x3b33e279a51cda42),

		UINT64_C(0x7316ba05e94a2760),
		UINT64_C(0x2947dbd72b62eeee),
		UINT64_C(0x994ee8778f5bb403),
		UINT64_C(0x65ba34e9f6e6a886),
		UINT64_C(0xf7048c8aaafeb0fb),
		UINT64_C(0xdb6facf385a67bf9),
		UINT64_C(0x55387477c8566d6b),
		UINT64_C(0x8c73d9a9b40a182d),

		UINT64_C(0x621dd5fb126b5231),
		UINT64_C(0xcb57d791aa28cab4),
		UINT64_C(0xd9c89d3f4662edaf),
		UINT64_C(0xe41ee971856c1ad6),
		UINT64_C(0x1e9842a9f9682f21),
		UINT64_C(0x657435bd92007385),
		UINT64_C(0x76ee8c371bb5adfe),
		UINT64_C(0x457d2ebeb1b7bc3a),

		UINT64_C(0x5ced48c3073d82ae),
		UINT64_C(0x5009cd7eac1805f1),
		UINT64_C(0xd58efb58cb715c37),
		UINT64_C(0xe1c8c503ec7e1592),
		UINT64_C(0x932b5eebaea84148),
		UINT64_C(0x477dd65b75fec5a4),
		UINT64_C(0xc1f70dbb2324b11d),
		UINT64_C(0x840bec343f01db29),
	},
	// WhitePawn
	{
		UINT64_C(0xc9154a3054cb7ed7),
		UINT64_C(0x04094ac226115302),
		UINT64_C(0x40a17b1b3a996c03),
		UINT64_C(0x6b075c0b979ef1e0),
		UINT64_C(0x71944990ac67d03f),
		UINT64_C(0x963bec4af2a26b43),
		UINT64_C(0x26ff8b7968bc4c68),
		UINT64_C(0x5b9e4399852cf357),

		UINT64_C(0x44c8e4f80f6729ac),
		UINT64_C(0x93fe2302cd9550e1),
		UINT64_C(0x0d1f2e2ff8960943),
		UINT64_C(0x25eb08709be821f6),
		UINT64_C(0x9ab982fcd9f28104),
		UINT64_C(0xcdd1ec49e9360804),
		UINT64_C(0x79ad756ecb367f06),
		UINT64_C(0x89eb5e0836cf62b0),

		UINT64_C(0x04ac95d9764704e3),
		UINT64_C(0xf7882147c928a4c4),
		UINT64_C(0xc7ce5faa50675679),
		UINT64_C(0x7e4c3e3103de876d),
		UINT64_C(0x35ae2a6974cacdad),
		UINT64_C(0xaf67df6b23302a45),
		UINT64_C(0x8d8dd335451b7a47),
		UINT64_C(0x44beddf622d3b188),

		UINT64_C(0xf5b6409a9f699b45),
		UINT64_C(0x9f5188f178ebc7ed),
		UINT64_C(0x8ceb2ff434d23c0e),
		UINT64_C(0x83f25956f402e601),
		UINT64_C(0x6f4d13a4f0cf30b6),
		UINT64_C(0xb1c0502c328b514e),
		UINT64_C(0x7a8a8ebd4ab58aa6),
		UINT64_C(0xec0573d9d6a20975),

		UINT64_C(0x11e38f6467dbfe67),
		UINT64_C(0xfc4e5be49eead763),
		UINT64_C(0x858cd5c130a8fc51),
		UINT64_C(0x4465d21d7b916424),
		UINT64_C(0xd92bf4909d34330f),
		UINT64_C(0x74cb5f744b0122d0),
		UINT64_C(0x6a3b845be9db821c),
		UINT64_C(0x5afff0e881a8f107),
		UINT64_C(0x4b4249fb7ba7423d),

		UINT64_C(0x003ad9f8d8e8eed5),
		UINT64_C(0xeb1c98f6e09750de),
		UINT64_C(0x9daf6ca66119a894),
		UINT64_C(0x0848380da2cdc0a2),
		UINT64_C(0x2e1af306216802d4),
		UINT64_C(0x19abddf45e5b7ea4),
		UINT64_C(0xb6c53281ef196767),
		UINT64_C(0xc54c385bed2ce3b2),

		UINT64_C(0xa817979decc2b27c),
		UINT64_C(0x5a2a2096cae78195),
		UINT64_C(0xa7ebee9dbf8345f6),
		UINT64_C(0x65d51a6270c4c3dc),
		UINT64_C(0x7da039225b9ac0e8),
		UINT64_C(0x178f6351e8aae464),
		UINT64_C(0xfdb1a3f8f880811b),
		UINT64_C(0xbba52f982ead6dee),

		UINT64_C(0x522d6eabb42098c3),
		UINT64_C(0xd2d67588acc60fd2),
		UINT64_C(0xab6184a29a26d467),
		UINT64_C(0xfb2ce53d12eec200),
		UINT64_C(0x1edcde41da3b9182),
		UINT64_C(0x4529c0b5807e70a5),
		UINT64_C(0x6177b11b182a5b83),
	},
	// Empty
	{
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
	},
	// Empty
	{
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0,
	},
	// BlackKing
	{
		UINT64_C(0xf4f8f7cc3a55fa7f),
		UINT64_C(0xbcc30e2a1ae5a6c4),
		UINT64_C(0x3a8b696603dfdd12),
		UINT64_C(0xc51390eed137f8dc),
		UINT64_C(0xdf897bf74b7fefb6),
		UINT64_C(0x616e5b1d937170b3),
		UINT64_C(0xe10f9783e6a1f315),
		UINT64_C(0x081c9dceb7b9f923),

		UINT64_C(0xed8ad207fa403596),
		UINT64_C(0x9bce7c7d0ab97518),
		UINT64_C(0x0fc06351ced68604),
		UINT64_C(0xc9e6273f2ec6e763),
		UINT64_C(0xead5ef41ca0957b4),
		UINT64_C(0xdf6f1fe61c62a293),
		UINT64_C(0xf3995f29904bc412),
		UINT64_C(0xf83305440895793b),

		UINT64_C(0x32b29c3f5467e863),
		UINT64_C(0x3ed4bf86f70fc4fa),
		UINT64_C(0x886f78f6d8ccf859),
		UINT64_C(0x14b4408582991ee0),
		UINT64_C(0x2ff64d5a20bafe98),
		UINT64_C(0x2c6a9f5a5b152675),
		UINT64_C(0x749d77156c4a125f),
		UINT64_C(0xa18c8f52fef0a2d7),

		UINT64_C(0xf4a189bca3c87ac0),
		UINT64_C(0xb95bffaf868dbdff),
		UINT64_C(0xc88c3b3e52bf009c),
		UINT64_C(0x05733f812439ad9c),
		UINT64_C(0x169b0070baec77aa),
		UINT64_C(0x49744d1aa6badab1),
		UINT64_C(0xbf05ed4f17ea10d3),
		UINT64_C(0x4b85feb634951e17),

		UINT64_C(0xe4e039fc6cde7a5b),
		UINT64_C(0x2a3e9b8d701289ab),
		UINT64_C(0x3e18795e13a27dad),
		UINT64_C(0xd75fc174992fc789),
		UINT64_C(0x73d2fb3f725c060f),
		UINT64_C(0x57f60d1c5c2403b8),
		UINT64_C(0xdec6b7f4069dc977),
		UINT64_C(0x7f31ea307d83b668),

		UINT64_C(0xec7a56b5d3763edf),
		UINT64_C(0x30199b8d81721c1c),
		UINT64_C(0xef54d9d354deb3c5),
		UINT64_C(0xe86119665f61c11d),
		UINT64_C(0x572a32643122fb1c),
		UINT64_C(0x6ba9658c371e003b),
		UINT64_C(0xad015a0f08f4a9cb),
		UINT64_C(0xd26728ca51cbccb6),

		UINT64_C(0xa3865b917a21bee1),
		UINT64_C(0x6d35946ba6b03017),
		UINT64_C(0x4fc223cf3e1cd5a2),
		UINT64_C(0xb3f2237cd7833832),
		UINT64_C(0x086ab980f57a8df5),
		UINT64_C(0x9a58e0c0091f362e),
		UINT64_C(0x757cd2e0e53ba4b9),
		UINT64_C(0xaf111d5fabce6a6f),

		UINT64_C(0x1465f4f274997b15),
		UINT64_C(0x3462e23246eb0d12),
		UINT64_C(0x726452adff1006fd),
		UINT64_C(0xac499e66fd93b059),
		UINT64_C(0x4ecbaf6b99a2e56a),
		UINT64_C(0x1041c97f21469fbf),
		UINT64_C(0x6dda538750a36a56),
		UINT64_C(0x94dca9a98cc1d99f),
	},
	// BlackQueen
	{
		UINT64_C(0x77a211638cd87dcd),
		UINT64_C(0xa6a31bd50991eaf4),
		UINT64_C(0x011bfa3ec8c026b3),
		UINT64_C(0x2cb470f801cbddfe),
		UINT64_C(0x98dbad4e585644f2),
		UINT64_C(0x46290af12fdc6634),
		UINT64_C(0x9b247c6a5a0a2d77),
		UINT64_C(0xd6bebbf2b9869edf),

		UINT64_C(0xa4aae898140b992c),
		UINT64_C(0x9d8a5a9cb6029dec),
		UINT64_C(0x2d2ad61b40e30884),
		UINT64_C(0xa90247f82bd087fa),
		UINT64_C(0x96bf2d094e665fca),
		UINT64_C(0x0e2a49eae6dc4add),
		UINT64_C(0x36bcf9022326df31),
		UINT64_C(0x3d2c88e91a86b1b9),

		UINT64_C(0x3e8841055bc756c2),
		UINT64_C(0x4812d804754aa522),
		UINT64_C(0xc09a37b9b5a60a6c),
		UINT64_C(0x86b3acf3725828ce),
		UINT64_C(0xab73f4897f4edcc1),
		UINT64_C(0xcd0599eb02c15a3b),
		UINT64_C(0x122c3fb7f17f1693),
		UINT64_C(0x03efa1a3de765fe3),

		UINT64_C(0x3c744c64f6cd0fd0),
		UINT64_C(0xffb8a18a638c32df),
		UINT64_C(0xce2d709075b56496),
		UINT64_C(0xec13bd7bb907c28d),
		UINT64_C(0x1e9cbb46ed2b79f8),
		UINT64_C(0x6150e6c619d03a47),
		UINT64_C(0xf8b24b23e5bba1e9),
		UINT64_C(0x05b23491415c5731),

		UINT64_C(0xac6fdf0b875d6f4d),
		UINT64_C(0x9a53e5fefae9bf64),
		UINT64_C(0x4550a6a211125ad8),
		UINT64_C(0xc85dc7123cd9c63f),
		UINT64_C(0xc859f0a16091cef6),
		UINT64_C(0xf1f596bb7fcbeb58),
		UINT64_C(0x9a97173efcf08eaf),
		UINT64_C(0x1b02983108490082),

		UINT64_C(0x97d4a8c6501481ed),
		UINT64_C(0x39e16a2ee1cf0a8e),
		UINT64_C(0x60928f452edff88a),
		UINT64_C(0x8c5d5ddcaf147682),
		UINT64_C(0x514eab759624319c),
		UINT64_C(0x282d95ee564bbc7d),
		UINT64_C(0x30c4098a2c0ea9b7),
		UINT64_C(0x8d4be2f3c4e2c7ed),

		UINT64_C(0xca08aa88874dc7c5),
		UINT64_C(0xef5770f56f23ab3f),
		UINT64_C(0xb86cc826b8a4f483),
		UINT64_C(0xcef35fd1ba58fbf1),
		UINT64_C(0x1c4c4d5225c6a03c),
		UINT64_C(0x540ae3e26cd6f2e3),
		UINT64_C(0x073c6f2e85dc5791),
		UINT64_C(0x5a7c921272b60cd6),

		UINT64_C(0x51e77f35b26b0f65),
		UINT64_C(0x7873076f894c1741),
		UINT64_C(0x58bb95f718869463),
		UINT64_C(0x98d2c3df1b1057e9),
		UINT64_C(0xcd1b5c04053b94f1),
		UINT64_C(0x0520ef737974a25a),
		UINT64_C(0xb04004966560cda8),
		UINT64_C(0xd9c460639fff593a),
	},
	// BlackRook
	{
		UINT64_C(0x8f84cf5e9c63a4e4),
		UINT64_C(0x9f9cdb21e4265481),
		UINT64_C(0xae76dce90166fcb1),
		UINT64_C(0x2c00978be7e946e1),
		UINT64_C(0x3edb6548e399ea23),
		UINT64_C(0x9a2eab067b1d6389),
		UINT64_C(0x3368d04265078033),
		UINT64_C(0x16c8657810cb31be),

		UINT64_C(0x8152a38826988196),
		UINT64_C(0xff09a25603bc3685),
		UINT64_C(0x9da9a95a084ada86),
		UINT64_C(0x686d71730d08a5f5),
		UINT64_C(0x9b7122f7a659c196),
		UINT64_C(0x79cafe1cfd745ce9),
		UINT64_C(0x450fcd2b936b21ba),
		UINT64_C(0x65e176d0f1faaba0),

		UINT64_C(0x9defe22c226a2937),
		UINT64_C(0x312d522443582b81),
		UINT64_C(0x27fd7d290abc8791),
		UINT64_C(0x9cb424b4689b1085),
		UINT64_C(0x0b1ee7d9bc7ed638),
		UINT64_C(0x8c4a47129f11b13e),
		UINT64_C(0x81f99bd9881ec40d),
		UINT64_C(0x18ca6862cc295b36),

		UINT64_C(0xd3a012a193a0670e),
		UINT64_C(0x38f322136e477422),
		UINT64_C(0x0d57c9805da53f9b),
		UINT64_C(0x7c719d808b472f38),
		UINT64_C(0xd2ebb0c1c120fd43),
		UINT64_C(0xbafd25ccacada6b9),
		UINT64_C(0x7a3b210b35402d94),
		UINT64_C(0x0798eecdce02da12),

		UINT64_C(0xf7dc1295b2fdacf2),
		UINT64_C(0x72676a76edc34f5e),
		UINT64_C(0x2e7ab868cb80bd96),
		UINT64_C(0xe6472bce9a471812),
		UINT64_C(0x6dabeca8ff13c4ab),
		UINT64_C(0x49a6a9802cf4c7e6),
		UINT64_C(0x488851cea3bc5b56),
		UINT64_C(0xa0036e7d09b73710),

		UINT64_C(0x2bebc5c27d8b5075),
		UINT64_C(0x787f3e77a964398a),
		UINT64_C(0x1ce33aa448409dbe),
		UINT64_C(0x905631255b7dd08f),
		UINT64_C(0x197ec96e161d61b7),
		UINT64_C(0xf3ee87a872c7b156),
		UINT64_C(0x6496ab32fb360802),
		UINT64_C(0xf7bd02665d4b2833),

		UINT64_C(0xbf1dd354e1c16673),
		UINT64_C(0xab7a42f389c21b59),
		UINT64_C(0xfeeaf54f69f2c5dd),
		UINT64_C(0xb2805d02045d2527),
		UINT64_C(0x428f1491b65296fc),
		UINT64_C(0xc458fec8573b6b2f),
		UINT64_C(0x191695de290ddef8),
		UINT64_C(0x59384d05101a51f9),

		UINT64_C(0xb5e5973e3e6c271b),
		UINT64_C(0xd374d2d6d48885fb),
		UINT64_C(0x750ed047a2910e3b),
		UINT64_C(0x23c4d2f89df98083),
		UINT64_C(0x82ccb3a7fbd0d688),
		UINT64_C(0x8e3055837bd395ab),
		UINT64_C(0xe9862968513801e4),
		UINT64_C(0xf30e1f7924b5059f),
	},
	// BlackBishop
	{
		UINT64_C(0xaef9214a3dafaebb),
		UINT64_C(0x595359d437555f11),
		UINT64_C(0x864b460c3542867d),
		UINT64_C(0xcfef6cc115b6c581),
		UINT64_C(0x5dad64e511cef43a),
		UINT64_C(0x87a312b6c386ccdf),
		UINT64_C(0x316c5cf705464792),
		UINT64_C(0xc86136ea872d8560),

		UINT64_C(0x8a3df4dc1a5f51e8),
		UINT64_C(0x9bae5a4593329914),
		UINT64_C(0xaa371c7ee343e4ef),
		UINT64_C(0xc4c973438fac7798),
		UINT64_C(0x8e1c4f7ca8b63684),
		UINT64_C(0x201cbdb1165441ca),
		UINT64_C(0x96b26b38b840a691),
		UINT64_C(0x68979d345cbe4394),

		UINT64_C(0x0f4ea3459a936a89),
		UINT64_C(0xfb1adf39decbe51c),
		UINT64_C(0x6675f542d506b2b7),
		UINT64_C(0xffd179dc8b371e03),
		UINT64_C(0xb26babad603cda4c),
		UINT64_C(0xd85321c6d903fb5c),
		UINT64_C(0x98f47c174e79a448),
		UINT64_C(0x5eea28cf3254b050),

		UINT64_C(0x24aa86493ee408ed),
		UINT64_C(0x6e7f7f59139f0ef1),
		UINT64_C(0x45a7fff92512be7c),
		UINT64_C(0x4020cd989e2ad493),
		UINT64_C(0x38e3864a180f2c82),
		UINT64_C(0x3cd439786f924cf1),
		UINT64_C(0x43be37dd084d404c),
		UINT64_C(0xf661aac05df616fd),

		UINT64_C(0x18a8112595332b81),
		UINT64_C(0xfa38986fcce991c4),
		UINT64_C(0x3fd06f80d4faabed),
		UINT64_C(0xf5d2da68b6e592f6),
		UINT64_C(0x559cfcb55d4d4495),
		UINT64_C(0xe8e8e2b3c886ef82),
		UINT64_C(0x8056a673a349f583),
		UINT64_C(0x30233c3671d552fe),

		UINT64_C(0xa6f0f430cb09b065),
		UINT64_C(0xd359b10c11bc1b48),
		UINT64_C(0xe05e58bd2e1cd9dd),
		UINT64_C(0xf392cce8c43c2c9b),
		UINT64_C(0x137f2f231cf7dd04),
		UINT64_C(0x1b4d78fcc9f30645),
		UINT64_C(0xae3f8cfecaec81cb),
		UINT64_C(0x01e09828827d73bb),

		UINT64_C(0x124ef86cea170d67),
		UINT64_C(0xf3187a792ae2a11b),
		UINT64_C(0x2592985dee9a14bc),
		UINT64_C(0x10232632e736552f),
		UINT64_C(0x8b83551daa92ef94),
		UINT64_C(0xf75a50e2e509d038),
		UINT64_C(0x03e19775a722b635),
		UINT64_C(0x6687bda454e55cc2),

		UINT64_C(0x88f6ba2fc53221b0),
		UINT64_C(0x86a8fb4ef53fc628),
		UINT64_C(0xc26d0e5f1dea6150),
		UINT64_C(0x0a0d2a833e75ff7a),
		UINT64_C(0x5dedefd219e31d97),
		UINT64_C(0x1639521ac79f991c),
		UINT64_C(0xb693309c5a6696a1),
		UINT64_C(0xb34ef308c176dacd),
	},
	// BlackKnight
	{
		UINT64_C(0x8c0e48d578d0c62e),
		UINT64_C(0x0efb595c2274f8e7),
		UINT64_C(0xb99a38710cca949f),
		UINT64_C(0x0cd2bcb6a1ce8939),
		UINT64_C(0xc36c1bcef3b7132e),
		UINT64_C(0xd98f8098e57c3ade),
		UINT64_C(0x8d60d26082cc5e66),
		UINT64_C(0x6ed67083a0986432),

		UINT64_C(0xf0c691588aea09a4),
		UINT64_C(0xf278dfa798343aa5),
		UINT64_C(0x4251301408454553),
		UINT64_C(0xc13f48761eae2cdf),
		UINT64_C(0x1db502b921181744),
		UINT64_C(0x51ae72db5efb5369),
		UINT64_C(0x603ba05f5f23e864),
		UINT64_C(0x18fa1e0c10916b38),

		UINT64_C(0xb72dc2d7ed91b4bc),
		UINT64_C(0x0749741fd44ab2ec),
		UINT64_C(0x598332aeab692676),
		UINT64_C(0x2ba658fd0178969b),
		UINT64_C(0x7604714f9a9fa83d),
		UINT64_C(0x406b825f315fb561),
		UINT64_C(0x48e0c576ec9ac891),
		UINT64_C(0x96dc2caa168b8d80),

		UINT64_C(0xfc02936de85bc77e),
		UINT64_C(0xc9d8d730a2282b25),
		UINT64_C(0x42ef1929d997a68b),
		UINT64_C(0x6d4be421a819f8ea),
		UINT64_C(0x7243d531e9d6d82f),
		UINT64_C(0x8a45d102af05a8e9),
		UINT64_C(0x5a46dffe3305cd02),
		UINT64_C(0xaf414fd9b8d3e493),

		UINT64_C(0x5fac96743afe163d),
		UINT64_C(0x2ecbfb6e3ee6f398),
		UINT64_C(0x53246a06bda62a84),
		UINT64_C(0x46751f92ef74413f),
		UINT64_C(0xf4df091448d0e5ad),
		UINT64_C(0xb98a823a9e7d850c),
		UINT64_C(0x4d2cb5bab4fa993e),
		UINT64_C(0xd227213a8457a9d9),

		UINT64_C(0x63930e3593b0083c),
		UINT64_C(0x1f71bd25c753a781),
		UINT64_C(0x18fe4194dad76930),
		UINT64_C(0x034aa4e5ef625b84),
		UINT64_C(0x8da56b3f5da4c701),
		UINT64_C(0x1dcc1864dc2d55a2),
		UINT64_C(0x048abe8723804b87),
		UINT64_C(0xc9f6b7240f58cb84),

		UINT64_C(0x1852e3c6c798c31a),
		UINT64_C(0xccfb12a58600ff6f),
		UINT64_C(0xdf2463ed1e69c6cf),
		UINT64_C(0xf392029cd6251877),
		UINT64_C(0xa584d536566f1d65),
		UINT64_C(0x66e3156dd8742bc6),
		UINT64_C(0x571f051721c6de3b),
		UINT64_C(0x4c4bf4e34fa92df6),

		UINT64_C(0xe0e5fee5152a5265),
		UINT64_C(0xe4776589d3e12ad2),
		UINT64_C(0x11f3605f0f87408b),
		UINT64_C(0x2936cf11d29a4153),
		UINT64_C(0x51c95b7f0e953cda),
		UINT64_C(0xa44c3656302546a5),
		UINT64_C(0x240fcfb80ee8671b),
		UINT64_C(0x5b9f78b47b5e17e9),
	},
	// BlackPawn
	{
		UINT64_C(0xb259769216954272),
		UINT64_C(0x6aa6880f1589864a),
		UINT64_C(0x4affebf5b942a96f),
		UINT64_C(0x8b50441a2ee48136),
		UINT64_C(0x185d0f5bfcdc8890),
		UINT64_C(0x75448f1782032637),
		UINT64_C(0x233ec58165e74b46),
		UINT64_C(0xd17539644d0e1301),

		UINT64_C(0xbde253c57e9bac3a),
		UINT64_C(0x527f20a177e0ed4b),
		UINT64_C(0xcdab268776e292ac),
		UINT64_C(0x409f72f4d38b7948),
		UINT64_C(0x7922923f76d74c7d),
		UINT64_C(0x6b9f4d13d48832f7),
		UINT64_C(0x6415c44d69a95b9c),
		UINT64_C(0xf30b1c2bf0173d68),

		UINT64_C(0x16300ca2f823614c),
		UINT64_C(0x866eefbda718e04c),
		UINT64_C(0xc88b32d088f799ca),
		UINT64_C(0x113017b991c45d50),
		UINT64_C(0x64d6fd22d032a91c),
		UINT64_C(0x035bff9b98443df5),
		UINT64_C(0x73626b81adb788b4),
		UINT64_C(0x58a324553f1d5a4f),

		UINT64_C(0x879cd6e046d5199e),
		UINT64_C(0x0844b95c1b35a886),
		UINT64_C(0x32fe6062572b1af6),
		UINT64_C(0x7ba66b270783da0a),
		UINT64_C(0x724a9c4e4f2d0511),
		UINT64_C(0x33641c19cdefa364),
		UINT64_C(0x5f2dbe6cbbf4f98d),
		UINT64_C(0xa2feb5bd2f354d51),

		UINT64_C(0x0e25e7dbb6f55080),
		UINT64_C(0x3c955a6b617a923c),
		UINT64_C(0xeaee6919b1a77668),
		UINT64_C(0xbfc8c5bc72fe4f32),
		UINT64_C(0x2bb960a249094616),
		UINT64_C(0x7d101382b9dbf1ff),
		UINT64_C(0x1fa79e3d05328128),
		UINT64_C(0x56fb686c927681ef),

		UINT64_C(0x522d3bb761678d90),
		UINT64_C(0x1e37a31517264bd7),
		UINT64_C(0xbf5bf9f64805e9ca),
		UINT64_C(0xabaa35e4d8fc7b29),
		UINT64_C(0x564a1669e374d841),
		UINT64_C(0xf3894a340ca98b83),
		UINT64_C(0x0a4aec17e5565f07),
		UINT64_C(0xa4546e38d3257fe7),

		UINT64_C(0x029ff24bb8ee83a4),
		UINT64_C(0x6cc60098585c2ef0),
		UINT64_C(0x9c3bfbddb7432847),
		UINT64_C(0x28935c25e5e93c39),
		UINT64_C(0xfc006fa76f71e429),
		UINT64_C(0x2e596b5a1fa162ba),
		UINT64_C(0xe6419045dcc9a8c8),
		UINT64_C(0x6b766b5fc1e2ab4d),

		UINT64_C(0x8a1ad6a33fb25cf0),
		UINT64_C(0xf232c4fa12425059),
		UINT64_C(0xf2756284b64195a9),
		UINT64_C(0x88a0aee4198a2795),
		UINT64_C(0x781e9e741c2fc4f6),
		UINT64_C(0x057a8ea4b4c76573),
		UINT64_C(0xabea748efb8faf25),
		UINT64_C(0xedb2d1cd3e3452df),
	},
#endif
};

uint64_t const Castling[4] =
{
#if 1
	UINT64_C(0x38918d25eac93e11), // WhiteQS
	UINT64_C(0x60c5f1b38762756d), // WhiteKS
	UINT64_C(0x4a2da478101f9d64), // BlackQS
	UINT64_C(0xfed940d4bb964ecb), // BlackKS
#else // alternative set
	UINT64_C(0xd7924133b5f3c9e4),	// WhiteQS
	UINT64_C(0x41309eb017971c28),	// WhiteKS
	UINT64_C(0x23831c2de80baebf),	// BlackQS
	UINT64_C(0x6a61312ab2c41723),	// BlackKS
#endif
};

uint64_t const EnPassant[Max_En_Passant_Squares] =
{
#if 1
	UINT64_C(0xbc5e6419e34ab321),	// a3
	UINT64_C(0x3513a06b02fc5132),	// b3
	UINT64_C(0xb83ea9358f46207b),	// c3
	UINT64_C(0xe575a233ac88fbf0),	// d3
	UINT64_C(0x64c8173b165c69ac),	// e3
	UINT64_C(0xe361ef6d97725e14),	// f3
	UINT64_C(0x1ad0d77aa083746f),	// g3
	UINT64_C(0x29a2f875cbc5f61a),	// h3

	UINT64_C(0x0d929e0170d1eda7),	// a6
	UINT64_C(0xd13dda118259fd9f),	// b6
	UINT64_C(0xe8cb491492468f4b),	// c6
	UINT64_C(0x9c49ffc0f1b05f16),	// d6
	UINT64_C(0xb76ca00d646c4009),	// e6
	UINT64_C(0x99d8482b93ac2334),	// f6
	UINT64_C(0x9d8a11eda9fe0d09),	// g6
	UINT64_C(0x021f507b5b6d8771),	// h6
#else // alternative set
	UINT64_C(0xdf435687057f4e6d),	// a3
	UINT64_C(0x26024cbae9663f9d),	// b3
	UINT64_C(0xbc9d578c9dde4f01),	// c3
	UINT64_C(0x6a35051a173b7c2e),	// d3
	UINT64_C(0x9bd04da145b2e7e4),	// e3
	UINT64_C(0x44c1b954602c8d4f),	// f3
	UINT64_C(0xb6ac54b27a14dd46),	// g3
	UINT64_C(0x1d612c4a46c15365),	// h3

	UINT64_C(0x3084d5ff1a7e2c10),	// a6
	UINT64_C(0x85cac611ba340e15),	// b6
	UINT64_C(0x15110f44ab651ff8),	// c6
	UINT64_C(0x422a43a9d2417495),	// d6
	UINT64_C(0xced6af0eae46e908),	// e6
	UINT64_C(0x90a7ba36946b98d9),	// f6
	UINT64_C(0x73a093d169724196),	// g6
	UINT64_C(0xcb51354722fb743b),	// h6
#endif
};

uint64_t const ToMove =
{
#if 1
	UINT64_C(0xb1aac26e1c3caa9d),	// Black
#else // alternative set
	UINT64_C(0xaaed59a913f77582),	// Black
#endif
};

uint64_t const CastlingRook[Max_Squares] =
{
#if 1
	UINT64_C(0x85c5df427ee97b66),	// a1
	UINT64_C(0x8b08f0ba914f433b),	// b1
	UINT64_C(0xc550169d3baf1bd0),	// c1
	UINT64_C(0xc9e0d79a7ae18874),	// d1
	UINT64_C(0xb8f5baef849cf8f3),	// e1
	UINT64_C(0x9f543f73fdc3a0c6),	// f1
	UINT64_C(0xf96811b98c36b78f),	// g1
	UINT64_C(0x2eb88c6b12f5f076),	// h1

	0, 0, 0, 0, 0, 0, 0, 0,		// a2-h2
	0, 0, 0, 0, 0, 0, 0, 0,		// a3-h3
	0, 0, 0, 0, 0, 0, 0, 0,		// a4-h4
	0, 0, 0, 0, 0, 0, 0, 0,		// a5-h5
	0, 0, 0, 0, 0, 0, 0, 0,		// a6-h6
	0, 0, 0, 0, 0, 0, 0, 0,		// a7-h7

	UINT64_C(0x70a20639306414e1),	// a8
	UINT64_C(0x2aab26e0a7eb2dcf),	// b8
	UINT64_C(0x300d23b842a58bf6),	// c8
	UINT64_C(0x84804ddd113e164d),	// d8
	UINT64_C(0xce912ec49285fb5f),	// e8
	UINT64_C(0x73965253e568362e),	// f8
	UINT64_C(0x137f60642df2b0ca),	// g8
	UINT64_C(0xd5eec3fd4c28d85a),	// h8
#else // alternative set
	UINT64_C(0x85c5df427ee97b66),	// a1
	UINT64_C(0x8b08f0ba914f433b),	// b1
	UINT64_C(0xc550169d3baf1bd0),	// c1
	UINT64_C(0xc9e0d79a7ae18874),	// d1
	UINT64_C(0xb8f5baef849cf8f3),	// e1
	UINT64_C(0x9f543f73fdc3a0c6),	// f1
	UINT64_C(0xf96811b98c36b78f),	// g1
	UINT64_C(0x2eb88c6b12f5f076),	// h1

	0, 0, 0, 0, 0, 0, 0, 0,		// a2-h2
	0, 0, 0, 0, 0, 0, 0, 0,		// a3-h3
	0, 0, 0, 0, 0, 0, 0, 0,		// a4-h4
	0, 0, 0, 0, 0, 0, 0, 0,		// a5-h5
	0, 0, 0, 0, 0, 0, 0, 0,		// a6-h6
	0, 0, 0, 0, 0, 0, 0, 0,		// a7-h7

	UINT64_C(0x70a20639306414e1),	// a8
	UINT64_C(0x2aab26e0a7eb2dcf),	// b8
	UINT64_C(0x300d23b842a58bf6),	// c8
	UINT64_C(0x84804ddd113e164d),	// d8
	UINT64_C(0xce912ec49285fb5f),	// e8
	UINT64_C(0x73965253e568362e),	// f8
	UINT64_C(0x137f60642df2b0ca),	// g8
	UINT64_C(0xd5eec3fd4c28d85a),	// h8
#endif
};

} // namespace rand64
} // namespace db

#endif // _db_rand64_included

// vi:set ts=3 sw=3:
